Provides console server and HTTP management api.
Run:
-
xend start
- The daemon is stopped with:
+ Restart:
+ xend restart
+ The daemon is stopped with:
xend stop
The daemon should reconnect to device control interfaces
return daemon.stop()
elif sys.argv[1] == 'restart':
return daemon.stop() or daemon.start()
+ elif sys.argv[1] == 'status':
+ return daemon.status()
else:
print 'not an option:', sys.argv[1]
return 1
import domain
from params import *
-DEBUG = 1
+DEBUG = 0
class NotifierProtocol(protocol.Protocol):
"""Asynchronous handler for i/o on the notifier (event channel).
self.cleanup_xend(kill=kill)
self.cleanup_xfrd(kill=kill)
+ def status(self):
+ """Returns the status of the xend and xfrd daemons.
+ The return value is defined by the LSB:
+ 0 Running
+ 3 Not running
+ """
+ if (self.cleanup_process(XEND_PID_FILE, "xend", False) == 0 or
+ self.cleanup_process(XFRD_PID_FILE, "xfrd", False) == 0):
+ return 3
+ else:
+ return 0
+
def install_child_reaper(self):
#signal.signal(signal.SIGCHLD, self.onSIGCHLD)
# Ensure that zombie children are automatically reaped.
pass
else:
# Child
- self.set_user()
os.execl("/usr/sbin/xfrd", "xfrd")
def start(self, trace=0):
+ """Attempts to start the daemons.
+ The return value is defined by the LSB:
+ 0 Success
+ 4 Insufficient privileges
+ """
xend_pid = self.cleanup_xend()
xfrd_pid = self.cleanup_xfrd()
- if xfrd_pid == 0:
- self.start_xfrd()
- if xend_pid > 0:
- return 1
# Detach from TTY.
if not DEBUG:
os.setsid()
+ sys.stdin.close();
+ sys.stdout.close();
+ sys.stderr.close();
+ os.close(0);
+ os.close(1);
+ os.close(2);
if self.set_user():
- return 1
+ return 4
+ os.chdir("/")
+
+ if xfrd_pid == 0:
+ self.start_xfrd()
+ if xend_pid > 0:
+ # Trying to run an already-running service is a success.
+ return 0
+
self.install_child_reaper()
if self.fork_pid(XEND_PID_FILE):